use std::fmt::Debug;
use crate::extends::core::pager::{pager::Pager, sorter::Sorter};
use serde::{Deserialize, Serialize};
use rocket_okapi::okapi::schemars;
use rocket_okapi::okapi::schemars::JsonSchema;

/// 泛型结构体 `ResultData<T>` 用于封装分页和排序后的结果数据
#[derive(Debug, Deserialize, Serialize,JsonSchema)]
pub struct ResultData<T> {
    #[schemars(description = "数据内容，包含一个泛型 `T` 的向量，可以为空")]
    pub content: Option<Vec<T>>,

    #[schemars(description = "分页信息，可以为空")]
    pub pager: Option<Pager>,

    #[schemars(description = "排序信息，可以为空")]
    pub sorter: Option<Sorter>,
}

impl<T> ResultData<T> {
    /// 构建 `ResultData` 的构造函数
    ///
    /// # 参数
    /// * `content` - 数据内容，包含一个泛型 `T` 的向量
    /// * `pager` - 分页信息
    /// * `sorter` - 排序信息
    ///
    /// # 返回值
    /// 返回一个 `ResultData<T>` 对象，包含传入的数据、分页和排序信息
    pub fn builder(content: Option<Vec<T>>, pager: Option<Pager>, sorter: Option<Sorter>) -> Self {
        ResultData {
            content,
            pager,
            sorter,
        }
    }

    /// 构建一个空的 `ResultData` 对象
    ///
    /// # 返回值
    /// 返回一个 `ResultData<T>` 对象，所有字段均为空
    pub fn none() -> Self {
        ResultData {
            content: None,
            pager: None,
            sorter: None,
        }
    }
}
